#include <bits/stdc++.h>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
/*要么用数组来模拟，要么用stack这样栈的容器。
设立两个栈，第一个栈正常使用，满足前三个要求；第二个栈保持单调，大于栈首的数不入栈，只有当斩首元素从第一个栈弹出的时候，第二个栈才弹出就可以了 */

// 定义两个栈
stack<int> stackValue; // 满足前三个要求
stack<int> stackMin;   // 用来求操作四
void push(int x)//入栈
{
	stackValue.push(x);
	//空栈，x小于栈首元素的时候压入stackMin
	if (stackMin.empty() || stackMin.top() >= x)
		stackMin.push(x);
}
void pop()//出栈
{
	if (stackMin.top() == stackValue.top())
	{
		stackMin.pop();
	}
	stackValue.pop();
}
int top() { return stackValue.top(); }
int getMin() { return stackMin.top(); }

int main()
{
	int n;
	cin >> n;
	while (n--)
	{
		int a;
		cin >> a;
		switch (a)
		{
		case 1:
			int x;
			cin >> x;
			push(x);
			break;
		case 2:
			pop();
			break;
		case 3:
			cout << top() << endl;
			break;

		case 4:
			cout << getMin() << endl;
			break;
		}
	}
	return 0;
}
